// 解释器模式 - 非终结符表达式
// 表示逻辑与（AND）操作
// 非终结符表达式由其他表达式组合而成
public class AndExpression : IExpression
{
  // 左侧表达式
  private readonly IExpression _left;
  // 右侧表达式
  private readonly IExpression _right;

  // 构造函数 - 初始化左右两个子表达式
  public AndExpression(IExpression left, IExpression right)
  {
    _left = left;
    _right = right;
  }

  // 实现解释方法
  // 对左右两个表达式进行逻辑与操作
  public bool Interpret(Dictionary<string, bool> context)
  {
    // 递归解释左右子表达式，并进行逻辑与运算
    return _left.Interpret(context) && _right.Interpret(context);
  }
}